package cn.btks.backstagemanage.menu.service;

import cn.btks.backstagemanage.menu.dto.MenuDto;
import cn.btks.backstagemanage.menu.pojo.Menu;
import cn.btks.backstagemanage.menu.pojo.MenuRolesDto;
import cn.btks.backstagemanage.role.pojo.Role;
import cn.btks.commonserver.result.ResultState;

import java.io.IOException;
import java.util.List;

/**
 * @Author lijun
 * @Date 2021/1/9 14:34
 */
public interface MenuService {

    /**
     * 根据ID查询资源对象
     * @param id
     * @return
     */
    Menu findById(Long id);

    /**
     * 根据父ID查询资源对象
     * @param parentId
     * @return
     */
    List<Menu> findAllByParentId(Long parentId);

    /**
     * 查询所有的资源对象
     * @return
     */
    List<Menu> findAll();

    /**
     * 查询所有的menuDto
     * @return
     */
    List<MenuDto> findAllMenuDto();

    /**
     * 根据角色ID查询资源清单
     * @param roleId
     * @return
     */
    List<MenuDto> findByRoleId(Long roleId);

    /**
     * 根据角色ID查询资源清单（加密）
     * @param roleId
     * @return
     */
    List<MenuDto> findByRoleId1(Long roleId) throws IOException;

    /**
     * 根据用户ID查询其角色下的关联资源
     * @param userId
     * @return
     */
    List<MenuDto> findAllByUserId(Long userId);

    /**
     * 根据用户ID查询其角色下的关联资源（加密）
     * @param userId
     * @return
     */
    List<MenuDto> findAllByUserId1(Long userId) throws IOException;

    /**
     * 分页查询资源清单信息
     * @param pageNumber
     * @param pageSize
     * @param name 资源名称
     * @return
     */
    ResultState findPageList(Integer pageNumber, Integer pageSize, String name);

    /**
     * 新增资源菜单
     * @param menu
     * @return
     */
    ResultState save(Menu menu);

    /**
     * 批量新增资源菜单
     * @param menus
     * @return
     */
    ResultState saveAll(List<Menu> menus);

    /**
     * 更新资源菜单
     * @param menu
     * @return
     */
    ResultState update(Menu menu);

    /**
     * 根据角色ID更新关联资源清单
     * @param menuRolesDto
     * @return
     */
    ResultState updateMenuRoles(MenuRolesDto menuRolesDto);

    /**
     * 根据角色ID更新关联资源清单（加密）
     * @param menuRolesDto
     * @return
     */
    ResultState updateMenuRoles1(MenuRolesDto menuRolesDto) throws IOException;

    /**
     * 根据ID删除资源
     * @param id
     * @return
     */
    ResultState delete(Long id);

    /**
     * 根据ID删除资源（加密）
     * @param id
     * @return
     */
    ResultState delete1(Long id) throws IOException;

    /**
     * 根据资源清单ID删除关联角色信息
     * @param id
     * @return
     */
    ResultState deleteConnection(Long id);

    /**
     * 根据资源清单ID删除关联角色信息（加密）
     * @param id
     * @return
     */
    ResultState deleteConnection1(Long id) throws IOException;

    /**
     * 测试
     * @return
     */
    ResultState test() throws IOException;
}
